/** 
 * 数组的归并方法有两个reduce和reduceRight(ECMAscript 5新增方法)
 * 1.两者都会迭代数组的所有项
 * 2.reduce方法从数组的第一项开始，reduceRight从数组的最后一项开始
 * 3.都接受两个参数，处理函数和归并的初始值
 * 
 * 
 * 关于处理函数
 * 4.传入的处理函数接收4个参数，前一个值、当前值、项的索引、数组对象
 * 5.这个函数返回的任何值都会作为第一个参数自动给传给下一项
 * 6.第一次迭代发生在数组的第二项上，因此第一个参数是数组的第一项，第二个参数就是数组的第二项
*/

// 做递归加法
var value = [1, 2, 3, 4, 5]
var sum1 = value.reduce(function(pre, cur, index, arr) {
  return pre + cur
})
console.log('sum1', sum1) // 15

// 做归并乘法
var sum2 = value.reduce(function(pre, cur, index, arr) {
  return pre * cur
})
console.log('sum2', sum2) // 120
// 试一试传入第二个参数的情况 将带入的第二个参数10立即代入第一次递归的pre(即将第二个参数作为数组)
var secarguArr = [1, 2, 3, 4, 5]
var sum3 = secarguArr.reduce(function(pre, cur, index, arr) {
  console.log('pre', pre) // 10 11 13 16 20
  return pre + cur
}, 10)
console.log('sum3', sum3) // 25

